package cn.tedu.ivos.audit.service.AuditServiceImpl;

import cn.tedu.ivos.application.pojo.entity.Application;
import cn.tedu.ivos.audit.mapper.AuditMapper;
import cn.tedu.ivos.audit.pojo.entity.Audit;
import cn.tedu.ivos.audit.pojo.vo.AuditVO;
import cn.tedu.ivos.audit.service.AuditService;
import cn.tedu.ivos.base.enums.AuditStatusEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;

// @Transactional 是spring提供的一个用于管理事物的注解，用来管理类或方法上的事务行为
// 在对数据库做操作时，可以确保该类中的数据库操作在同一个事务中执行 要么成功，要么都失败
@Transactional
@Service
@Slf4j
public class AuditServiceImpl implements AuditService {

    @Autowired
    private AuditMapper auditMapper;

    @Override
    public void insertAudit(Application application) {
        List<Long> userIdList= application.getAuditUserIdList();
        for (int i = 0 ; i <  userIdList.size() ; i++)
        {
            Audit audit = new Audit();
            log.debug("application.getId() = " + application.getId());
            audit.setApplicationId(application.getId());   // 设置 申请单id （application_id）   为空   如何解决  => 见ApplicationServiceImpl 中的注释  在 sql语句中加usetGenerateKeys="true" 和 keyProperty="id"
            audit.setAuditUserId(userIdList.get(i)); // 设置申请人id
            audit.setAuditSort(i); // 设置审批次序
            if (i==0) // 如果当前新建的第一条审批数据  第一个审批人的状态时 待我审核
            {
                audit.setAuditStatus(AuditStatusEnum.MY_PENGING.getCode().toString());
            }else{ // 其他人的审批状态是 待他人审核
                audit.setAuditStatus(AuditStatusEnum.PENGING.getCode().toString());
            }
            audit.setCreateTime(new Date());
            auditMapper.insert(audit);
        }
    }

    @Override
    public List<AuditVO> selectAuditByApplicationIed(Long id) {
        return auditMapper.selectAuditByApplicationIed(id);
    }
}
